package com.example.loginpilot_01.controller;

import com.example.loginpilot_01.service.user.UserService;
import org.springframework.ui.Model;
import com.example.loginpilot_01.entity.User;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;

@Controller
public class LoginPilotController {

    private final UserService userService;

    public LoginPilotController(UserService userService) {
        this.userService = userService;
    }

    // 访问登录页（你的自定义页面）
    @GetMapping("/login")
    public String tologinPage(Model model, @RequestParam(required = false) String error) {

        if (error != null) {
            model.addAttribute("errorMsg", "用户名或密码错误，新用户请先注册");
        }
        return "login"; // 对应templates/login.html
    }

    // 处理登录提交（加密逻辑主要修改区）
    //@PostMapping("/login")
    public String login(
            @RequestParam("username") String username,
            @RequestParam("password") String password,
            Model model,
            HttpSession session) {

        // 调用service的login方法（已集成加密校验）
        boolean isSuccess = userService.login(username, password);

        if (isSuccess) {
            model.addAttribute("username", username);
            return "index";
        } else  {
            model.addAttribute("error", "用户名或密码错误");
            return "login";
        }
    }

    // 2. 登录成功后跳转首页，传递用户名和角色
    @GetMapping("/index")
    public String indexPage(Model model) {
        // 从Spring Security上下文获取当前登录用户信息
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        String username = authentication.getName(); // 获取登录用户名

        // 查询用户角色，传递给前端页面
        User currentUser = userService.findByUsername(username);
        model.addAttribute("username", username); // 用户名（用于欢迎语）
        model.addAttribute("role", currentUser.getRole()); // 角色（用于动态显示内容）
        return "index"; // 对应templates/index.html
    }

    // 3. 管理员页面入口（仅ROLE_ADMIN角色可访问）
    @GetMapping("/admin")
    public String adminPage(Model model) {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        model.addAttribute("adminName", authentication.getName()); // 传递管理员用户名
        return "admin"; // 对应templates/admin.html
    }

    // 注意：删除原来的@PostMapping("/login")方法！,或者像我一样注释掉@PostMapping("/login")
    // 因为现在登录逻辑由Spring Security的formLogin自动处理，无需自定义提交接口

    //下面是新增的注册逻辑：
    // 新增1：GET /register → 跳转注册页（未登录用户可访问）
    @GetMapping("/register")
    public String toRegisterPage() {
        return "register"; // 对应templates/register.html
    }

    // 新增2：POST /register → 处理注册请求（接收前端表单数据）
    @PostMapping("/register")
    public String register(
            User user, // 接收前端传递的用户名、密码、电话、邮箱
            @RequestParam("confirmPassword") String confirmPassword, // 接收确认密码
            Model model) {

        // 调用UserService的注册方法，获取校验结果（null=成功，非null=错误信息）
        String errorMsg = userService.register(user, confirmPassword);

        if (errorMsg != null) {
            // 注册失败：留在注册页，显示错误提示
            model.addAttribute("errorMsg", errorMsg);
            return "register";
        } else {
            // 注册成功：跳转登录页，显示成功提示
            model.addAttribute("successMsg", "注册成功，请使用账号密码登录");
            return "login";
        }
    }
}
